table of contents
GIT-FORMAT-PATCH(1) | Git Manual | GIT-FORMAT-PATCH(1) |
NAME¶
git-format-patch - Prepare patches for e-mail submission
SYNOPSIS¶
git format-patch [-k] [(-o|--output-directory) <dir> | --stdout]
[--no-thread | --thread[=<style>]]
[(--attach|--inline)[=<boundary>] | --no-attach]
[-s | --signoff]
[-n | --numbered | -N | --no-numbered]
[--start-number <n>] [--numbered-files]
[--in-reply-to=Message-Id] [--suffix=.<sfx>]
[--ignore-if-in-upstream]
[--subject-prefix=Subject-Prefix]
[--to=<email>] [--cc=<email>]
[--cover-letter]
[<common diff options>]
[ <since> | <revision range> ]
DESCRIPTION¶
Prepare each commit with its patch in one file per commit, formatted to resemble UNIX mailbox format. The output of this command is convenient for e-mail submission or for use with git am.
There are two ways to specify which commits to operate on.
The first rule takes precedence in the case of a single <commit>. To apply the second rule, i.e., format everything since the beginning of history up until <commit>, use the --root option: git format-patch --root <commit>. If you want to format only <commit> itself, you can do this with git format-patch -1 <commit>.
By default, each output file is numbered sequentially from 1, and uses the first line of the commit message (massaged for pathname safety) as the filename. With the --numbered-files option, the output file names will only be numbers, without the first line of the commit appended. The names of the output files are printed to standard output, unless the --stdout option is specified.
If -o is specified, output files are created in <dir>. Otherwise they are created in the current working directory.
By default, the subject of a single patch is "[PATCH] First Line" and the subject when multiple patches are output is "[PATCH n/m] First Line". To force 1/1 to be added for a single patch, use -n. To omit patch numbers from the subject, use -N.
If given --thread, git-format-patch will generate In-Reply-To and References headers to make the second and subsequent patch mails appear as replies to the first mail; this also generates a Message-Id header to reference.
OPTIONS¶
-p, --no-stat
-U<n>, --unified=<n>
--patience
--stat[=width[,name-width]]
--numstat
--shortstat
--dirstat[=limit]
--dirstat-by-file[=limit]
--summary
--no-renames
--full-index
--binary
--abbrev[=<n>]
-B
-M
-C
--find-copies-harder
-l<num>
-O<orderfile>
-a, --text
--ignore-space-at-eol
-b, --ignore-space-change
-w, --ignore-all-space
--inter-hunk-context=<lines>
--ext-diff
--no-ext-diff
--ignore-submodules
--src-prefix=<prefix>
--dst-prefix=<prefix>
--no-prefix
For more detailed explanation on these common options, see also gitdiffcore(7).
-<n>
-o <dir>, --output-directory <dir>
-n, --numbered
-N, --no-numbered
--start-number <n>
--numbered-files
-k, --keep-subject
-s, --signoff
--stdout
--attach[=<boundary>]
--no-attach
--inline[=<boundary>]
--thread[=<style>], --no-thread
The optional <style> argument can be either shallow or deep. shallow threading makes every mail a reply to the head of the series, where the head is chosen from the cover letter, the --in-reply-to, and the first patch mail, in this order. deep threading makes every mail a reply to the previous one.
The default is --no-thread, unless the format.thread configuration is set. If --thread is specified without a style, it defaults to the style specified by format.thread if any, or else shallow.
Beware that the default for git send-email is to thread emails itself. If you want git format-patch to take care of threading, you will want to ensure that threading is disabled for git send-email.
--in-reply-to=Message-Id
--ignore-if-in-upstream
--subject-prefix=<Subject-Prefix>
--to=<email>
--cc=<email>
--add-header=<header>
--cover-letter
--suffix=.<sfx>
Note that the leading character does not have to be a dot; for example, you can use --suffix=-patch to get 0001-description-of-my-change-patch.
--no-binary
--root
CONFIGURATION¶
You can specify extra mail header lines to be added to each message, defaults for the subject prefix and file suffix, number patches when outputting more than one patch, add "To" or "Cc:" headers, configure attachments, and sign off patches with configuration variables.
[format]
headers = "Organization: git-foo\n"
subjectprefix = CHANGE
suffix = .txt
numbered = auto
to = <email>
cc = <email>
attach [ = mime-boundary-string ]
signoff = true
EXAMPLES¶
$ git format-patch -k --stdout R1..R2 | git am -3 -k
$ git format-patch origin
For each commit a separate file is created in the current directory.
$ git format-patch --root origin
$ git format-patch -M -B origin
Additionally, it detects and handles renames and complete rewrites intelligently to produce a renaming patch. A renaming patch reduces the amount of text output, and generally makes it easier to review. Note that non-git "patch" programs won’t understand renaming patches, so use it only when you know the recipient uses git to apply your patch.
$ git format-patch -3
SEE ALSO¶
AUTHOR¶
Written by Junio C Hamano <gitster@pobox.com[1]>
DOCUMENTATION¶
Documentation by Junio C Hamano and the git-list <git@vger.kernel.org[2]>.
GIT¶
Part of the git(1) suite
NOTES¶
- 1.
- gitster@pobox.com
- 2.
- git@vger.kernel.org
02/03/2020 | Git 1.7.1 |